/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package javalee.dao;

import javalee.maps.Maquina;
import javalee.maps.Produto;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;

/**
 *
 * @author Thiago
 */
public class ProdutoDAO extends DAO{
    private Statement stmt = null;

    @Override
    public boolean cadastrar(Object obj) {
           
        try{
            Produto p = (Produto) obj;
            String SQL = "insert into produto (descricao, qtdade, origem, id_maquina, tempo, valor_compra, valor_venda, nivel_critico, lote, ipi) values ('"+p.getDescricao()+"',"+p.getQtdade()+", '"+p.getOrigem()+"', "+p.getIdMaquina().getId()+", "+p.getTempo()+", "+p.getValorCompra()+", "+p.getValorVenda()+", "+p.getNivelCritico()+", "+p.getLote()+", "+p.getIpi()+")";
            stmt = conexaoBanco.createStatement();
            stmt.executeUpdate(SQL);
            stmt.close();
            //"insert into cliente (nome) values ('?')"
            return (true);
        } 
           catch (SQLException ex) {
             System.out.println("Problema com o SQL");
            // ex.printStackTrace();
             return (false);
       }
    }
    
    

    @Override
    public boolean alterar(Object obj) {
        try{
            Produto p = (Produto) obj;
            String SQL = "update produto set descricao='"+p.getDescricao()+"', qtdade="+p.getQtdade()+",origem='"+p.getOrigem()+"', id_maquina="+p.getIdMaquina().getId()+", tempo="+p.getTempo()+", valor_compra="+p.getValorCompra()+",valor_venda="+p.getValorVenda()+", nivel_critico="+p.getNivelCritico()+" ,lote="+p.getLote()+",ipi="+p.getIpi()+" where id = "+p.getId();
            stmt = conexaoBanco.createStatement();
            stmt.executeUpdate(SQL);
            stmt.close();
            //"insert into cliente (nome) values ('?')"
            return (true);
        } 
           catch (SQLException ex) {
             System.out.println("Problema com o SQL");
           //  ex.printStackTrace();
             return (false);
       }
    }

    @Override
    public boolean excluir(Object obj) {
        try{
            Produto p = (Produto) obj;
            String SQL = "delete from produto where id = "+p.getId();
            stmt = conexaoBanco.createStatement();
            stmt.executeUpdate(SQL);
            stmt.close();
            //"insert into cliente (nome) values ('?')"
            return (true);
        } 
           catch (SQLException ex) {
             System.out.println("Problema com o SQL");
            // ex.printStackTrace();
             return (false);
       }
    }

    @Override
    public ArrayList consultar(Object obj) {
         ArrayList<Produto> lista = new ArrayList<Produto>();
        //List<Person> personlist = new List<Person>();
        try {
            stmt = conexaoBanco.createStatement();
            String query = "SELECT p.id as id,"
                    + " p.descricao as descricao,"
                    + " p.qtdade as qtdade,"
                    + " p.origem as origem,"
                    + " CASE WHEN p.origem = 'M' THEN 0 ELSE p.id_maquina end as id_maquina,"
                    + " p.tempo as tempo,"
                    + " CASE WHEN p.origem = 'M' THEN '---' ELSE m.descricao end as maquina,"
                    + " p.valor_compra as valor_compra,"
                    + " p.valor_venda as valor_venda,"
                    + " p.nivel_critico as nivel_critico,"
                    + " p.lote as lote,"
                    + " p.ipi as ipi from produto p LEFT JOIN maquina m on p.id_maquina = m.id";
            if(!("".equals( obj.toString()))){
                query = query.concat(" WHERE p.descricao LIKE '"+obj.toString()+"%'");
            }
            query += " LIMIT 100";
            ResultSet srs = stmt.executeQuery(query);
            while (srs.next()) {
                Produto p = new Produto();
                p.setDescricao(srs.getString("descricao"));
                p.setId(srs.getInt("id"));
                p.setQtdade(srs.getInt("qtdade"));
                p.setTempo(srs.getInt("tempo"));
                p.setOrigem(srs.getString("origem").charAt(0));
                p.setIdMaquina(new Maquina(srs.getInt("id_maquina"), (srs.getString("maquina"))));
                p.setValorCompra(srs.getFloat("valor_compra"));
                p.setValorVenda(srs.getFloat("valor_venda"));
                p.setNivelCritico(srs.getShort("nivel_critico"));
                p.setLote(srs.getShort("lote"));
                p.setIpi(srs.getFloat("ipi"));
                lista.add(p);
            }
           
            stmt.close();
        }
        
           catch (SQLException ex) {
             System.out.println("Problema com o SQL");
             ex.printStackTrace();
             return (null);
       }
 return lista;
}
     public Produto consultarPorId(Integer obj) {
        Produto p = new Produto();
         try {
            stmt = conexaoBanco.createStatement();
String query = "SELECT p.id as id,"
                    + " p.descricao as descricao,"
                    + " p.qtdade as qtdade,"
                    + " p.origem as origem,"
                    + " CASE WHEN p.origem = 'M' THEN 0 ELSE p.id_maquina end as id_maquina,"
                    + " p.tempo as tempo,"
                    + " CASE WHEN p.origem = 'M' THEN '---' ELSE m.descricao end as maquina,"
                    + " p.valor_compra as valor_compra,"
                    + " p.valor_venda as valor_venda,"
                    + " p.nivel_critico as nivel_critico,"
                    + " p.lote as lote,"
                    + " p.ipi as ipi from produto p LEFT JOIN maquina m on p.id_maquina = m.id"
                    + " WHERE p.id = "+obj.toString();
            
            ResultSet srs = stmt.executeQuery(query);
            
            
            while (srs.next()) {
                p.setDescricao(srs.getString("descricao"));
                p.setId(srs.getInt("id"));
                p.setQtdade(srs.getInt("qtdade"));
                p.setTempo(srs.getInt("tempo"));
                p.setOrigem(srs.getString("origem").charAt(0));
                p.setIdMaquina(new Maquina(srs.getInt("id_maquina"), (srs.getString("maquina"))));
                p.setValorCompra(srs.getFloat("valor_compra"));
                p.setValorVenda(srs.getFloat("valor_venda"));
                p.setNivelCritico(srs.getShort("nivel_critico"));
                p.setLote(srs.getShort("lote"));
                p.setIpi(srs.getFloat("ipi"));
                
                }
            
     }
     catch(Exception e){}
     return (p);    
    }

     public ArrayList consultarSemId(Integer obj, String busca) {
         ArrayList<Produto> lista = new ArrayList<Produto>();
         
         try {
            stmt = conexaoBanco.createStatement();
String query = "SELECT p.id as id,"
                    + " p.descricao as descricao,"
                    + " p.qtdade as qtdade,"
                    + " p.origem as origem,"
                    + " CASE WHEN p.origem = 'M' THEN 0 ELSE p.id_maquina end as id_maquina,"
                    + " p.tempo as tempo,"
                    + " CASE WHEN p.origem = 'M' THEN '---' ELSE m.descricao end as maquina, "
                    + " p.valor_compra as valor_compra,"
                    + " p.valor_venda as valor_venda,"
                    + " p.nivel_critico as nivel_critico,"
                    + " p.lote as lote,"
                    + " p.ipi as ipi from produto p LEFT JOIN maquina m on p.id_maquina = m.id"
                    + " WHERE p.id not in(select id_prod_composto from itens_estrut where id_produto =  "+obj.toString()+")";
            if(!("".equals( obj.toString()))){
                query += " AND p.descricao LIKE '"+busca+"%'";
            }
            
            ResultSet srs = stmt.executeQuery(query);
            
            
            while (srs.next()) {
                Produto p = new Produto();
                p.setDescricao(srs.getString("descricao"));
                p.setId(srs.getInt("id"));
                p.setQtdade(srs.getInt("qtdade"));
                p.setTempo(srs.getInt("tempo"));
                p.setOrigem(srs.getString("origem").charAt(0));
                p.setIdMaquina(new Maquina(srs.getInt("id_maquina"), (srs.getString("maquina"))));
                p.setValorCompra(srs.getFloat("valor_compra"));
                p.setValorVenda(srs.getFloat("valor_venda"));
                p.setNivelCritico(srs.getShort("nivel_critico"));
                p.setLote(srs.getShort("lote"));
                p.setIpi(srs.getFloat("ipi"));
                
                lista.add(p);
                }
            
     }
     catch(Exception e){}
     return (lista);    
    }
     
     public ArrayList consultarSemIdVenda(Integer obj, String busca) {
         ArrayList<Produto> lista = new ArrayList<Produto>();
         
         try {
            stmt = conexaoBanco.createStatement();
String query = "SELECT p.id as id,"
                    + " p.descricao as descricao,"
                    + " p.qtdade as qtdade,"
                    + " p.origem as origem,"
                    + " CASE WHEN p.origem = 'M' THEN 0 ELSE p.id_maquina end as id_maquina,"
                    + " p.tempo as tempo,"
                    + " CASE WHEN p.origem = 'M' THEN '---' ELSE m.descricao end as maquina, "
                    + " p.valor_compra as valor_compra,"
                    + " p.valor_venda as valor_venda,"
                    + " p.nivel_critico as nivel_critico,"
                    + " p.lote as lote,"
                    + " p.ipi as ipi from produto p LEFT JOIN maquina m on p.id_maquina = m.id"
                    + " WHERE p.id not in(select id_produto from itens_venda where id_venda =  "+obj.toString()+")";
            if(!("".equals( obj.toString()))){
                query += " AND p.descricao LIKE '"+busca+"%'";
            }
            
            ResultSet srs = stmt.executeQuery(query);
            
            
            while (srs.next()) {
                Produto p = new Produto();
                p.setDescricao(srs.getString("descricao"));
                p.setId(srs.getInt("id"));
                p.setQtdade(srs.getInt("qtdade"));
                p.setTempo(srs.getInt("tempo"));
                p.setOrigem(srs.getString("origem").charAt(0));
                p.setIdMaquina(new Maquina(srs.getInt("id_maquina"), (srs.getString("maquina"))));
                p.setValorCompra(srs.getFloat("valor_compra"));
                p.setValorVenda(srs.getFloat("valor_venda"));
                p.setNivelCritico(srs.getShort("nivel_critico"));
                p.setLote(srs.getShort("lote"));
                p.setIpi(srs.getFloat("ipi"));
                
                lista.add(p);
                }
            
     }catch (SQLException ex) {
             System.out.println("Problema com o SQL");
             ex.printStackTrace();
             return (null);
     }
     return (lista);    
    }     
     
     
      public int getUltimoID(){
         int id = 0;
         try{
        stmt = conexaoBanco.createStatement();
        String query = "SELECT last_insert_id() as id";
        ResultSet srs = stmt.executeQuery(query);
         while (srs.next()) {
            id = srs.getInt("id");
         }
         }catch(SQLException e){
            System.out.println("Problema com o SQL");
            return 0;
         }
         return id;
    }    
}

